"""卖家对话消息表定义"""

from sqlalchemy import Column, String, DateTime, Text, Integer, BigInteger

from config.database import Base, BaseMixin


class SellerMessage(Base, BaseMixin):
    """卖家对话消息表"""

    __tablename__ = "seller_message"

    # 会话和消息标识
    conversation_id = Column(String(128), nullable=True, index=True, comment="会话ID（sellerId#itemId或chat_id）")
    chat_id = Column(String(128), nullable=True, index=True, comment="聊天ID（官方chat_id，如55138335758）")
    message_id = Column(String(128), nullable=True, unique=True, index=True, comment="消息唯一ID（来源平台，如3810461329862.PNM）")
    temp_id = Column(String(128), nullable=True, index=True, comment="前端生成的临时ID（用于乐观更新时关联消息）")
    mid = Column(String(64), nullable=True, index=True, comment="消息mid（用于匹配官方send response）")
    uuid = Column(String(128), nullable=True, comment="消息UUID（客户端生成）")

    # 客户端信息
    client_id = Column(String(100), nullable=False, index=True, comment="客户端ID")

    # 用户信息
    seller_id = Column(String(100), nullable=False, index=True, comment="对方用户ID（卖家ID）")
    seller_name = Column(String(200), nullable=True, comment="对方用户昵称（卖家昵称）")
    seller_avatar = Column(String(500), nullable=True, comment="对方用户头像URL")

    # 商品信息
    item_id = Column(String(100), nullable=True, index=True, comment="商品ID")
    item_title = Column(String(500), nullable=True, comment="商品标题")

    # 消息内容
    message_type = Column(String(20), nullable=False, default='text', comment="内容类型（text=文本,image=图片,voice=语音,video=视频,system=系统,other=其他）")
    direction = Column(String(10), nullable=False, default='recv', comment="消息方向（send/recv）")
    message_content = Column(Text, nullable=True, comment="消息内容（文本或资源URL）")
    message_extra = Column(Text, nullable=True, comment="消息扩展数据（JSON）")

    # 官方API字段
    content_type = Column(String(20), nullable=True, default='private', comment="消息类型（private=私信,system=系统消息,group=群消息）来自闲鱼官方API，用于区分不同消息类型")
    custom_content_type = Column(Integer, nullable=True, comment="官方内容类型代码（1=文本,2=图片,3=语音,4=视频,5=商品卡片,6=系统消息）")
    read_status = Column(Integer, nullable=True, comment="已读状态（1=未读，2=已读）用于已读回执功能，由Backend在收到Agent的已读确认后更新")
    
    # 时间戳（官方）
    create_at = Column(BigInteger, nullable=True, comment="消息创建时间戳（毫秒，官方字段）")
    message_time = Column(DateTime, nullable=False, index=True, comment="消息时间（本地时间）")
    
    # 消息状态机（用于前端UI展示和消息生命周期管理）
    message_status = Column(Integer, nullable=False, default=2, index=True, comment="消息状态：0=CREATING,1=PENDING,2=SENT,3=DELIVERED,4=READ,5=RECALLED,6=FAILED")
